<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>拖拽</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .box {
            width: 100px;
            height: 100px;
            background-image: radial-gradient(red, yellow,blue );
            border-radius: 50%;
            position: absolute;
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <script>
    //  元素.offsetWidth 返回值：width+左右padding+左右border
    //  元素.offsetHeight 返回值：height+上下padding+上下border
        var box = document.querySelector('.box');
        var eleWidth = box.offsetWidth;
        var eleHeight = box.offsetHeight;
        box.onmousedown = function () {
            document.onmousemove = function (e) {
                // 设置光标的位置在元素的中间
                // 因而元素的left = 光标的位置 - 元素的宽度/ 2
                var left = e.clientX - eleWidth / 2;
                var top = e.clientY - eleHeight / 2;
                // 判断移动的边界值（只让元素在document中移动）
                if (left <= 0) {
                //左边的边界值
                    left = 0;
                }
                if (top <= 0) { 
                //上边的边界值
                    top = 0;
                }
                if (left >= window.innerWidth - eleWidth) { 
                //右边的边界值
                    left = window.innerWidth - eleWidth;
                }
                if (top >= window.innerHeight - eleHeight) {
                 //下边的边界值
                    top = window.innerHeight - eleHeight
                }
                // 右边和下边的边界值
                box.style.left = left + 'px';
                box.style.top = top + 'px';
            }
        }
        // onmouseup 事件会在鼠标按键被松开时发生
        document.onmouseup = function () {
            // 清除事件
            document.nmousemoveo = null;
            // mousemove 事件是一个实时响应的事件，当鼠标指针的位置发生变化时（至少移动一个像素），就会触发 mousemove 事件。
        }
    </script>
</body>

</html>